from setting_floor import Excel_setting,Requests_setting
import difflib;
from logs_floor import logs_obj;
import time;

'''
执行接口用例自动化的步骤:
1. 首先需要读取用例信息
2. 将获取到的接口信息进行遍历，通过request对象进行接口测试
3. 根据响应信息判定当前接口执行的结果
'''
#调用日志对象
log_obj = logs_obj.get_diy_log_obj();

'''
方法: 将传入该方法的用例文件中的用例进行执行并将测试结果写入用例文件中
参数: 用例文件的路径     用例文件的sheet页
返回值: 无
'''


def case_exe_file(case_file_url,sheet_name):
    inter_list = Excel_setting.excel_read(case_file_url,sheet_name);

    #定义一个列表用于存储接口执行后的响应信息
    resp_text_list = [];
    #定义一个列表用于存储接口执行后的判定结果
    result_list = [];

    #将获取到的接口信息进行遍历
    for i in inter_list:

        # print(i.get("interface_method"));
        # print(i.get("interface_url"));
        # print(i.get("interface_header"));
        # print(i.get("interface_parmrs"));

        resp = Requests_setting.requests_strong(i.get("interface_method"),i.get("interface_url"),i.get("interface_header"),i.get("interface_parmrs"))

        #将接口执行后的响应信息存入响应信息列表中
        resp_text_list.append(resp.text);

        if resp.status_code == 200 and difflib.SequenceMatcher(None,i.get("interface_think"),resp.text).ratio() > 0.8:

            print(i.get("interface_name"),"接口测试通过");
            result_list.append("√");
            log_obj.info(i.get("interface_name")+"测试通过")

        else:
            print(i.get("interface_name"),"接口测试不通过");
            result_list.append("×");
            log_obj.error(i.get("interface_name")+"接口测试不通过!"+"响应信息:"+resp.text)

    Excel_setting.excel_write(resp_text_list,result_list,case_file_url,sheet_name);

sheet_list = Excel_setting.get_case_sheetNameList(r"C:\Users\Administrator\Desktop\yy_case.xls")

for i in sheet_list:

    case_exe_file(r"C:\Users\Administrator\Desktop\yy_case.xls",i);
